Applying Atm. Pressure as a body force

General scientific issues regarding ROMS

Moderators: arango, robertson

Post Reply
Posts: 157
Joined: Mon Apr 28, 2003 5:12 pm
Location: NOAA

Applying Atm. Pressure as a body force

#1 Post by lanerolle » Wed Jan 19, 2005 8:15 pm

Is it possible in ROMS to apply Atmospheric Pressure as a body force?
Are there any current CPP options in cppdefs.h to do this?

Posts: 3
Joined: Tue Nov 04, 2003 1:12 pm
Location: Hebrew University of Jerusalem

Atmospheric pressure as a body force

#2 Post by shilo » Mon Jan 24, 2005 7:28 am

Yes, you can apply Atm. pressure as a body force.
First, you need to include Atm. pressure in your netcdf forcing file. For example, you can edit frc_bulk.cdl in order to create forcing file. In cppdefs.h you need to undef ANA_PAIR.

User avatar
Posts: 185
Joined: Fri Nov 14, 2003 4:57 pm

#3 Post by shchepet » Tue Feb 01, 2005 7:01 pm

Atmospheric pressure forcing can be easily included into the pressure gradient routine without
messing with body-force-type algorithm. As the matter of fact, any pressure gradient force
calculation algorithm involves (explicitly or implicitly) vertical integration of density field from
surface to the current depth z. This integration initializes pressure (or pressure gradient) at
surface as ZERO and then, starting from it, density (or density gradient) is integrated
downward. It is just sufficient to replace that ZERO with correct atmospheric pressure
(or pressure gradient) that is it: ROMS pressure gradient algorithm will do the rest: propagate
this forcing throughout the whole water column.

There are essentially two families pressure gradient routines currently in use in ROMS:

prsgrd32.F (without A)
prsgrd32AC1.F (amongh others, "A" stands for "alternative")

The "A" version calculates pressure explicitly, so you find loop where pressure is initialized
and insert atmospheric pressure there:

do i=istrU-1,iend
P(i,j,N)=g*z_w(i,j,N) + GRho*( rho(i,j,N)
& +0.5*(rho(i,j,N)-rho(i,j,N-1))*(z_w(i,j,N)-z_r(i,j,N))
& /(z_r(i,j,N)-z_r(i,j,N-1)) )*(z_w(i,j,N)-z_r(i,j,N))
do k=N-1,1,-1
do i=istrU-1,iend
P(i,j,k)=P(i,j,k+1)+HalfGRho*( (rho(i,j,k+1)+rho(i,j,k)) .........

in the upper loop: g*z_w(i,j,N) is contibution due to barotropic mode free surface displacement, etc... Just ADD in atmospheric pressure here, within this loop and
nowhere else.

The "non-A" (that also include pevious algorithm, such as standard and weighted jacobian)
versions calcucate horizontal density gradient first and then integrate it vertically. So you
have to compute atmospheric pressure gradient first (in BOTH directions) and then add it
into the place in the code where contribution due to free-surface disturbance is computed.
The atmospheric pressure gradient is then propagated downward naturally by the vertical
integration algorithm.

Post Reply