[MITgcm-support] question on sponge-layer/mpi

Theo Gerkema Theo.Gerkema at hmg.inpg.fr
Thu Sep 9 12:22:16 EDT 2004


Hi Uli,

The problem arising on multiple processors has been solved.

I've defined the sponge in external_forcing.F
by introducing the field rayleighz, as indicated previously.
(NB: one needs to add a line in DYNVARS.h too:
      _RL  rayleighz(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)  ).
To make it work on multiple processors, add the line
   #include "EESUPPORT.h"
in external_forcing.F, and also, under !INPUT/OUTPUT PARAMETERS:
      INTEGER mpiMyId
Then build a loop around the sponge:
       IF (mpiMyId .EQ. 0) THEN
   .....
       ENDIF

This way the sponge works only in the most leftward tile.
NB: my runs are basically 2d (3 points in y), and the tiles
are set up in x. I'm not sure the procedure works the same way
in a full 3d problem.

-- Theo.



Uli Riemenschneider wrote:

> Hi again,
>
> I was wondering if someone could give me a few pointers on how to setup
> a sponge layer in the MITgcm. Basically what I want to do is a kind of 
> climatological relaxation to a fixed/prescribed background profile of 
> temperature. Following the e-mails from Theo a few weeks back I have 
> figured out that I need to add a bit of code in the temperature 
> subroutine of external_forcing.F along the lines of what Theo outlined 
> n his mail, but for the temperature field:
>
>        DO j=jMin,jMax
>        DO i=iMin+1,iMax-1
>         gT(i,j,kLev,bi,bj) = gT(i,j,kLev,bi,bj)
>     &   +rayleighz(i,j,kLev,bi,bj)*
>     &   ('backgound Temp (tRef ?)' - gT(i,j,kLev,bi,bj))
>        ENDDO
>       ENDDO
>
> I am sure someone has done this kind of thing before so I was hoping I 
> could get help with figuring out where to best add the sponge layer to 
> the code. Plus I am also running the model on multiple processors and 
> was wondering if the problem Theo was having has been resolved?
>
> Many thanks!
> Uli
>
> Quoting Theo Gerkema <Theo.Gerkema at hmg.inpg.fr>:
>
> Could someone help me sorting out the following problem:
> in external_forcing.F I've added a sponge-layer; the sponge
> covers (say) the first 100 points of the basin:
>
>      DO j=jMin,jMax
>       DO i=iMin,iMax
>        rayleighz(i,j,kLev,bi,bj)=0.
>       ENDDO
>      ENDDO
>      DO j=jMin,jMax
>       DO i=1,100
>        rayleighz(i,j,kLev,bi,bj)=0.1*(100-i)/100.
>       ENDDO
>      ENDDO
>
> It works selectively on the baroclinic field (tides):
>
>        DO j=jMin,jMax
>        DO i=iMin+1,iMax-1
>         gU(i,j,kLev,bi,bj) = gU(i,j,kLev,bi,bj)
>     &   -rayleighz(i,j,kLev,bi,bj)*
>     &    abs(uVel(i+1,j,kLev,bi,bj)-uVel(i-1,j,kLev,bi,bj))*
>     &    uVel(i,j,kLev,bi,bj)
>        ENDDO
>       ENDDO
>
> This works well, but I've now started doing runs in parallel,
> and if I run the code on for example two processors, an additional
> sponge-layer appears halfway the basin (ie at the left end of the 2nd
> sub-domain), rendering the results meaningless.
> Is there a way I can avoid the repetition of the sponge in parallel
> runs? Many thanks!
>





More information about the MITgcm-support mailing list