Issue: iceno3 was initialized to a spatially uniform value defined in PISCES/trcini_pisces.F90. This is not what we want. Later, PISCES jpno3 is updated by initialized by WOA data, which is what we want iceno3 to be initialized with.
Here is to show that iceno3 was initialized to a spatially uniform value across the domain:
iceno3 initialized to: 31.0400000000000 31.0400000000000
31.0400000000000 31.0400000000000 31.0400000000000
31.0400000000000 31.0400000000000 31.0400000000000
31.0400000000000 31.0400000000000 31.0400000000000
31.0400000000000 31.0400000000000 31.0400000000000
31.0400000000000 31.0400000000000 31.0400000000000
31.0400000000000 31.0400000000000 31.0400000000000
31.0400000000000 31.0400000000000 31.0400000000000
31.0400000000000 31.0400000000000 31.0400000000000
Here is to show that initialization of my_trc tracers is done before pisces tracers are updated with input data (trcini.F90):
IF( lk_pisces ) CALL trc_ini_pisces ! PISCES bio-model
IF( lk_cfc ) CALL trc_ini_cfc ! CFC tracers
IF( lk_c14b ) CALL trc_ini_c14b ! C14 bomb tracer
IF( lk_my_trc ) CALL trc_ini_my_trc ! MY_TRC tracers
IF( lwp ) THEN
!
CALL ctl_opn( numstr, 'tracer.stat', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea )
!
ENDIF
IF( ln_trcdta ) CALL trc_dta_init
IF( ln_rsttr ) THEN
!
CALL trc_rst_read ! restart from a file
!
ELSE
!
IF( ln_trcdta .AND. nb_trcdta > 0 ) THEN ! Initialisation of tracer from a file that may also be used for damping
!
CALL wrk_alloc( jpi, jpj, jpk, nb_trcdta, ztrcdta ) ! Memory allocation
!
CALL trc_dta( nit000, ztrcdta ) ! read tracer data at nit000
!
DO jn = 1, jptra
IF( ln_trc_ini(jn) ) THEN ! update passive tracers arrays with input data read from file
jl = n_trc_index(jn)
trn(:,:,:,jn) = ztrcdta(:,:,:,jl) * tmask(:,:,:)
ENDIF
ENDDO
CALL wrk_dealloc( jpi, jpj, jpk, nb_trcdta, ztrcdta )
ENDIF
!
trb(:,:,:,:) = trn(:,:,:,:)
!
ENDIF
I tried to add the following line just before the second last "ENDIF" statement above:
iceno3(:,:)=trn(:,:,1,jpno3)
However, the compilation error occurred which appears to be related to the ordering:
No rule to make target `trc_sms_my_trc.o', needed by `trcini.o'.
Thus, I had to instead initialize the ice BGC tracers in trcsms_my_trc.F90 instead of trcini_my_trc.F90 as follows:
IF( kt == nit000 ) THEN
IF( .NOT. ln_rsttr .AND. ln_trcdta ) THEN
icedia(:,:) = trn(:,:,1,jpdia)
write(numout,*) "iceno3 before is: ",iceno3
iceno3(:,:) = trn(:,:,1,jpno3)
write(numout,*) "iceno3 after is: ",iceno3
icenh4(:,:) = trn(:,:,1,jpnh4)
END IF
END IF
The output from WRITE statements prove that the values have changed:
iceno3 before is: 0.000000000000000E+000 0.000000000000000E+000
0.000000000000000E+000 0.000000000000000E+000 0.000000000000000E+000
0.000000000000000E+000 0.000000000000000E+000 0.000000000000000E+000
0.000000000000000E+000 0.000000000000000E+000 0.000000000000000E+000
0.000000000000000E+000 0.000000000000000E+000 0.000000000000000E+000
31.9878976156660 31.0438701002330 31.0369201106744
31.0369205118954 31.0383482948276 31.0616767301434
31.0677629528971 31.0492132090291 31.0419920432535
31.0440657798248 31.0444710620824 31.0447721884932
31.0375292688435 31.0382076116362 31.0373801558268
31.0398029146832 31.0397625744607 31.0331636088933
31.0327651221495 31.0220553651313 31.0230092701832
31.0342232771140 31.0552545248760 31.0397772061968
31.0473470388971 31.0546418640872 31.0543800885964
iceno3 after is: 0.000000000000000E+000 6.051918107557494E-007
6.110130904164567E-007 6.165130718275732E-007 6.223610345536756E-007
6.282784081119133E-007 6.347854462720852E-007 6.416655223934390E-007
6.425374792240063E-007 6.518916947527300E-007 6.615196029420712E-007
6.710462543721832E-007 6.779537599405078E-007 6.832150836929839E-007
1.485887675109245E-002 0.101301152128998 0.192842913115538
0.288261717144609 0.410586225212846 0.567104111609461
0.750865673296165 0.954964841291094 1.17256469087027
1.39693899756850 1.62147709851657 1.83974371937518
5.90219173052099 5.72045383050733 5.52942332795475
5.33964213875681 5.16237601645325 4.98851212702143
4.79097327138552 4.58829697326475 4.38163145548577
4.17732627934004 3.98400314182262 3.81032497675204
3.66491610553454 3.57114941381793 3.59987527391656
Although this may not be the best method (i.e. IF statement if not desirable for fast computing), this is it for now.
0 件のコメント:
コメントを投稿