44! ! MOSSCO benthic component.
55!
66! This computer program is part of MOSSCO.
7- ! > @copyright Copyright (C) 2013, 2014, 2015, 2016, 2018 Helmholtz-Zentrum Geesthacht
7+ ! > @copyright Copyright (C) 2021-2021 Helmholtz-Zentrum hereon GmbH
8+ ! > @copyright Copyright (C) 2013-2021 Helmholtz-Zentrum Geesthacht GmbH
89! > @author Carsten Lemmen <carsten.lemmen@hereon.de>
910! > @author Richard Hofmeister <richard.hofmeister@hereon.de>
1011!
@@ -118,24 +119,19 @@ subroutine InitializeP0(gridComp, importState, exportState, parentClock, rc)
118119
119120 call MOSSCO_CompEntry(gridComp, parentClock, name= name, currTime= currTime, importState= importState, &
120121 exportState= exportState, rc= localrc)
121- if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn= rc)) &
122- call ESMF_Finalize(rc= localrc, endflag= ESMF_END_ABORT)
122+ _MOSSCO_LOG_AND_FINALIZE_ON_ERROR_(rc)
123123
124124 InitializePhaseMap(1 ) = " IPDv00p1=1"
125125
126- call ESMF_AttributeAdd(gridComp, convention= " NUOPC" , purpose= " General" , &
127- attrList= (/ " InitializePhaseMap" / ), rc= localrc)
128- if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn= rc)) &
129- call ESMF_Finalize(rc= localrc, endflag= ESMF_END_ABORT)
126+ call ESMF_InfoGetFromHost(gridComp, info= info, rc= localrc)
127+ _MOSSCO_LOG_AND_FINALIZE_ON_ERROR_(rc)
130128
131- call ESMF_AttributeSet(gridComp, name= " InitializePhaseMap" , valueList= InitializePhaseMap, &
132- convention= " NUOPC" , purpose= " General" , rc= localrc)
133- if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn= rc)) &
134- call ESMF_Finalize(rc= localrc, endflag= ESMF_END_ABORT)
129+ call ESMF_InfoSet(info, key= " NUOPC/General/InitializePhaseMap" , &
130+ values= InitializePhaseMap, rc= localrc)
131+ _MOSSCO_LOG_AND_FINALIZE_ON_ERROR_(rc)
135132
136133 call MOSSCO_CompExit(gridComp, rc= localrc)
137- if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn= rc)) &
138- call ESMF_Finalize(rc= localrc, endflag= ESMF_END_ABORT)
134+ _MOSSCO_LOG_AND_FINALIZE_ON_ERROR_(rc)
139135
140136 end subroutine InitializeP0
141137
@@ -342,7 +338,7 @@ subroutine InitializeP1(gridComp, importState, exportState, parentClock, rc)
342338 integer ,dimension (:,:) ,allocatable ,target :: minIndexPDe,maxIndexPDe
343339 integer ,dimension (:,:,:),allocatable ,target :: deBlockList
344340 integer :: day_of_year, day, seconds_of_day
345- logical , dimension (:,:,:), pointer :: mask= >null ()
341+ integer , dimension (:,:,:), pointer :: mask= >null ()
346342 integer , dimension (:,:,:), pointer :: gridmask= >null ()
347343 real (ESMF_KIND_R8 ), dimension (:) , pointer :: coord1d= >null ()
348344 real (ESMF_KIND_R8 ), dimension (:,:), pointer :: coord2d= >null ()
@@ -569,7 +565,7 @@ subroutine InitializeP1(gridComp, importState, exportState, parentClock, rc)
569565 allocate (mask(1 - totalLWidth3(1 ,1 ):inum+ totalUWidth3(1 ,1 ), &
570566 1 - totalLWidth3(2 ,1 ):jnum+ totalUWidth3(2 ,1 ), &
571567 1 - totalLWidth3(3 ,1 ):numlayers+ totalUWidth3(3 ,1 )))
572- mask = .false.
568+ mask = 0
573569 allocate (ben% is_openboundary(1 - totalLWidth3(1 ,1 ):inum+ totalUWidth3(1 ,1 ), &
574570 1 - totalLWidth3(2 ,1 ):jnum+ totalUWidth3(2 ,1 ), &
575571 1 - totalLWidth3(3 ,1 ):numlayers+ totalUWidth3(3 ,1 )))
@@ -581,7 +577,7 @@ subroutine InitializeP1(gridComp, importState, exportState, parentClock, rc)
581577
582578 call ESMF_GridGetItem(state_grid, ESMF_GRIDITEM_MASK, farrayPtr= gridmask, rc= localrc)
583579 if (localrc == ESMF_SUCCESS) then
584- mask = ( gridmask.le. 0 ) ! >@todo: mask where gridmask /= 1
580+ mask = ( gridmask ) ! >@todo: mask where gridmask /= 1
585581 ben% is_openboundary = ( gridmask > 1 )
586582 ben% is_openboundary_hz = ben% is_openboundary(:,:,1 )
587583 end if
@@ -1475,7 +1471,7 @@ subroutine Run(gridComp, importState, exportState, parentClock, rc)
14751471 ! integrate bottom upward fluxes
14761472 ! todo: this does not work with the link coupler, yet. the bfl(:)%p pointers
14771473 ! have to be updated from importState here in Run
1478- if (any ((ben% layer_height(RANGE2D,1 ) <= 0 ).and. (.not. ben% mask(RANGE2D,1 )))) then
1474+ if (any ((ben% layer_height(RANGE2D,1 ) <= 0 ).and. (ben% mask(RANGE2D,1 )== 0 ))) then
14791475 write (message,' (A)' ) ' non-positive layer height detected'
14801476 call ESMF_LogWrite(trim (message), ESMF_LOGMSG_ERROR)
14811477 call ESMF_Finalize(rc= localrc, endflag= ESMF_END_ABORT)
@@ -1559,8 +1555,8 @@ subroutine Run(gridComp, importState, exportState, parentClock, rc)
15591555 index (itemName,' _flux_at_water_surface' )>0 ) then
15601556 farrayPtr3(RANGE2D,ben% knum) = farrayPtr3(RANGE2D,ben% knum) + ratePtr2(RANGE2D) * dt / ben% layer_height(RANGE2D,ben% knum)
15611557 elseif (index (itemName,' _flux_at_soil_surface' )>0 ) then
1562- ! > @todo Skip if .not. ben%mask(RANGE2D,k)
1563- ! if (all(ratePtr2(RANGE2D) == 0.0 .or. ben%mask(RANGE2D,1)) cycle
1558+ ! > @todo Skip if ben%mask(RANGE2D,k) == 0
1559+ ! if (all(ratePtr2(RANGE2D) == 0.0 .or. ben%mask(RANGE2D,1) == 0 ) cycle
15641560 ! Avoid overshoot of negative fluxes within a timestep
15651561 ! where (farrayPtr3(RANGE2D,1) + ratePtr2(RANGE2D) * dt / ben%layer_height(RANGE2D,1) > 0)
15661562 farrayPtr3(RANGE2D,1 ) = farrayPtr3(RANGE2D,1 ) + ratePtr2(RANGE2D) * dt / ben% layer_height(RANGE2D,1 )
@@ -1678,14 +1674,14 @@ subroutine integrate_flux_in_water(ben, importState)
16781674 end if
16791675
16801676 do k= 1 ,ben% knum
1681- if (any ((ben% layer_height(RANGE2D,k) <= 0 ).and. (.not. ben% mask(RANGE2D,k)))) then
1677+ if (any ((ben% layer_height(RANGE2D,k) <= 0 ).and. (ben% mask(RANGE2D,k) == 0 ))) then
16821678 write (message,' (A)' ) ' non-positive layer height detected'
16831679 call ESMF_LogWrite(trim (message), ESMF_LOGMSG_ERROR)
16841680 call ESMF_Finalize(rc= localrc, endflag= ESMF_END_ABORT)
16851681 endif
16861682
1687- where (.not. ben% mask(RANGE2D,k))
1688- ben% cell_per_column_volume(RANGE2D,k) = 1.0d0 / &
1683+ where (ben% mask(RANGE2D,k)== 0 )
1684+ ben% cell_per_column_volume(RANGE2D,k) = 1.0d0 / &
16891685 (sum (ben% layer_height(RANGE3D),dim= 3 )* ben% column_area(RANGE2D))
16901686 endwhere
16911687 enddo
0 commit comments