Re: land surface model


Subject: Re: land surface model
From: Mariana Vertenstein (mvertens@bearmtn-e0.cgd.ucar.edu)
Date: Fri Nov 27 1998 - 19:09:49 MST


In regards to the following message:

> The fix to get the lsm working on multiple processors on
> I have been testing CCM3.6.6 on an IBM RS6000 using the SPMD (MPI, message
> passing) version. I have successfully completed a number of one day test
> runs with the distribution default data/settings using 4, 8, and 16
> processors.

> When I attempt to use 32 or 64 processors, I encounter an error from the LSM
> module allocdyn caused by trying to allocate a zero length array. My guess
> is that instead of doing nothing at latitudes that have no land points, LSM
> is trying to allocate arrays and then do something zero times.

The IBM RS6000 is now an unsupported platform, and the above problem only
occurs for special cases. The main reason the RS6000 is unsupported is that
we no longer have RS6000 machines to test on. However, we have a fix to the
above problem.

To fix the problem on the IBM RS6000 using the SPMD implementation the
user should insert the following patch into the lsm routines allocdyn.F
and lsmdrv.F.

The patch below (and the full source files) are also availble on the CCM news page
at...

http://www.cgd.ucar.edu/cms/ccm3/news/

Mariana Vertenstein

Index: allocdyn.F
===================================================================
RCS file: /fs/cgd/csm/models/CVS.REPOS/lnd/lsm/allocdyn.F,v
retrieving revision 1.4
retrieving revision 1.5
diff -c -r1.4 -r1.5
*** allocdyn.F 1998/03/13 20:07:24 1.4
--- allocdyn.F 1998/10/16 20:11:04 1.5
***************
*** 48,55 ****
        call getmem ('allocdyn' ,kpt ,pclay )
        call getmem ('allocdyn' ,kpt ,plati )
        call getmem ('allocdyn' ,kpt ,plong )
! call getmem ('allocdyn' ,numlv ,pbegkpt)
! call getmem ('allocdyn' ,numlv ,pnumkpt)
  
  * dynamically allocate memory for lpt and kpt dependent variables
  * in lsmtvdyn.h
--- 48,57 ----
        call getmem ('allocdyn' ,kpt ,pclay )
        call getmem ('allocdyn' ,kpt ,plati )
        call getmem ('allocdyn' ,kpt ,plong )
! if (numlv .gt. 0) then
! call getmem ('allocdyn' ,numlv ,pbegkpt)
! call getmem ('allocdyn' ,numlv ,pnumkpt)
! endif
  
  * dynamically allocate memory for lpt and kpt dependent variables
  * in lsmtvdyn.h

===================================================================
RCS file: /fs/cgd/csm/models/CVS.REPOS/lnd/lsm/lsmdrv.F,v
retrieving revision 1.14
retrieving revision 1.15
diff -c -r1.14 -r1.15
*** lsmdrv.F 1998/04/29 22:47:17 1.14
--- lsmdrv.F 1998/10/16 20:11:12 1.15
***************
*** 233,238 ****
--- 233,241 ----
  C
  C HP directive
  C$DIR LOOP_PARALLEL,LOOP_PRIVATE(K)
+ #if ( defined SPMD )
+ if (numks.gt.0) then
+ #endif
        do i = 1, numlv
           k = begkpt(i)
           call lsm (nstep ,numkpt(i) ,dtlsm ,dtsoi ,
***************
*** 257,262 ****
--- 260,268 ----
       & hydro ,pergro ,conchk ,qover(k) ,qdrai(k) ,
       & i ,k )
        end do
+ #if ( defined SPMD )
+ endif
+ #endif
  
  * ----------------------------------------------------------------------
  * update basin runoff info



This archive was generated by hypermail 2b27 : Thu Jun 01 2000 - 09:07:43 MDT