[MITgcm-devel] pdaf in mitgcm
Martin Losch
Martin.Losch at awi.de
Tue Jun 13 08:52:45 EDT 2017
Hi all,
we use a sequential data assimilation framework (PDAF: http://pdaf.awi.de/trac/wiki) with the MITgcm. It requires minimal changes to the code (in eeboot_minimal.F and the_main_loop.F), where PDAF routines are called (currently enclosed with new CPP flag USE_PDAF). PDAF is freely available and Lars (the developer) will post example applications with the MITgcm very soon.
I would like to add our version of eeboot_minimal.F and the_main_loop.F to main repository, so that it is easier to maintain PDAF+MITgcm for use.
Any objections,
Martin
PS. below are the differences to current code (contextual diff):
Index: model/src/the_main_loop.F
===================================================================
RCS file: /u/gcmpack/MITgcm/model/src/the_main_loop.F,v
retrieving revision 1.181
diff -u -r1.181 the_main_loop.F
--- model/src/the_main_loop.F 20 Mar 2017 19:38:16 -0000 1.181
+++ model/src/the_main_loop.F 13 Jun 2017 12:34:49 -0000
@@ -1,5 +1,5 @@
C $Header: /u/gcmpack/MITgcm/model/src/the_main_loop.F,v 1.181 2017/03/20 19:38:16 mmazloff Exp $
-C $Name: $
+C $Name: BASE $
#include "PACKAGES_CONFIG.h"
#include "CPP_OPTIONS.h"
@@ -340,6 +340,13 @@
c >>>>>>>>>>>>>>>>>>>>>>>>>>> LOOP <<<<<<<<<<<<<<<<<<<<<<<<<<<<
c >>>>>>>>>>>>>>>>>>>>>>>>>>> STARTS <<<<<<<<<<<<<<<<<<<<<<<<<<<<
+#ifdef USE_PDAF
+c Initialize PDAF
+ CALL TIMER_START('INIT_PDAF [THE_MAIN_LOOP]', myThid)
+ CALL init_pdaf( nIter0, myTime, myIter, myThid )
+ CALL TIMER_STOP ('INIT_PDAF [THE_MAIN_LOOP]', myThid)
+#endif
+
c++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#ifndef ALLOW_OPENAD
# ifdef ALLOW_AUTODIFF
@@ -609,6 +616,13 @@
CALL MAIN_DO_LOOP( iloop, myTime, myIter, myThid )
CALL TIMER_STOP ('MAIN_DO_LOOP [THE_MAIN_LOOP]', myThid)
+#ifdef USE_PDAF
+C PDAF analysis step
+ CALL TIMER_START('ASSIMILATE_PDAF [THE_MAIN_LOOP]', myThid)
+ CALL assimilate_pdaf( myTime, myIter, myThid )
+ CALL TIMER_STOP ('ASSIMILATE_PDAF [THE_MAIN_LOOP]', myThid)
+#endif
+
c-- >>> Loop body end <<<
#ifndef ALLOW_OPENAD
# ifdef ALLOW_AUTODIFF
Index: eesupp/src/eeboot_minimal.F
===================================================================
RCS file: /u/gcmpack/MITgcm/eesupp/src/eeboot_minimal.F,v
retrieving revision 1.29
diff -u -r1.29 eeboot_minimal.F
--- eesupp/src/eeboot_minimal.F 28 Jan 2017 18:39:06 -0000 1.29
+++ eesupp/src/eeboot_minimal.F 13 Jun 2017 12:35:37 -0000
@@ -1,5 +1,5 @@
C $Header: /u/gcmpack/MITgcm/eesupp/src/eeboot_minimal.F,v 1.29 2017/01/28 18:39:06 jmc Exp $
-C $Name: $
+C $Name: BASE $
#include "PACKAGES_CONFIG.h"
#include "CPP_EEOPTIONS.h"
@@ -48,7 +48,11 @@
C fNam :: Used to build file name for standard and error output.
C msgBuf :: Used to build messages for printing.
INTEGER myThid
+#ifdef USE_PDAF
+ CHARACTER*18 fNam
+#else
CHARACTER*13 fNam
+#endif /* USE_PDAF */
CHARACTER*(MAX_LEN_MBUF) msgBuf
#ifdef ALLOW_USE_MPI
C mpiRC :: Error code reporting variable used with MPI.
@@ -61,6 +65,9 @@
#if defined(ALLOW_NEST_PARENT) || defined(ALLOW_NEST_CHILD)
INTEGER mpiMyWid, color
#endif
+#ifdef USE_PDAF
+ INTEGER mpi_task_id
+#endif /* USE_PDAF */
#endif /* ALLOW_USE_MPI */
CEOP
@@ -124,6 +131,13 @@
ENDIF
doReport = .FALSE.
+#ifdef USE_PDAF
+C initialize PDAF
+C for more output increase second parameter from 1 to 2
+ CALL init_parallel_pdaf(0, 1, MPI_COMM_MODEL, MPI_COMM_MODEL,
+ & mpi_task_id)
+#endif /* USE_PDAF */
+
#ifdef ALLOW_OASIS
C add a 1rst preliminary call EESET_PARAMS to set useOASIS
C (needed to decide either to call OASIS_INIT or not)
@@ -169,7 +183,11 @@
GOTO 999
ENDIF
myProcId = mpiMyId
+#ifdef USE_PDAF
+ WRITE(myProcessStr,'(I4.4,A1,I4.4)') mpi_task_id,'.',myProcId
+#else
WRITE(myProcessStr,'(I4.4)') myProcId
+#endif /* USE_PDAF */
mpiPidIo = myProcId
pidIO = mpiPidIo
IF ( mpiPidIo .EQ. myProcId ) THEN
@@ -177,8 +195,14 @@
IF( myProcId .EQ. 0 ) THEN
#endif
WRITE(fNam,'(A,A)') 'STDERR.', myProcessStr(1:4)
+#ifdef USE_PDAF
+ WRITE(fNam,'(A,A)') 'STDERR.', myProcessStr(1:9)
+#endif
OPEN(errorMessageUnit,FILE=fNam,STATUS='unknown')
WRITE(fNam,'(A,A)') 'STDOUT.', myProcessStr(1:4)
+#ifdef USE_PDAF
+ WRITE(fNam,'(A,A)') 'STDOUT.', myProcessStr(1:9)
+#endif
OPEN(standardMessageUnit,FILE=fNam,STATUS='unknown')
#ifdef SINGLE_DISK_IO
ELSE
More information about the MITgcm-devel
mailing list