This question really applies to CAM in general and will also hold for SCAM. It sounds like you would like to add a new tracer. If by passive you mean non advected field, you can register a new field to the physics_buffer (pbuf). The physics_buffer interface allows you to
add a field (returns an index that you can use to retrieve the field from the buffer later)
call pbuf_add_field('NPCCN', 'physpkg',dtype_r8,(/pcols,pver/), npccn_idx)
initialize a field
call pbuf_set_field(pbuf2d, npccn_idx, 0)
and retrieve a field from the buffer to modify or use in another routine or subsequent timestep given the field index
call pbuf_get_field(pbuf, npccn_idx, npccn)
or first retrieve the index first if it is not saved as a public module variable and then call pbuf_get_field.
npccn_idx = pbuf_get_index('NPCCN')
You can create fields with specific types (integer, real, etc.) and the returned field is generally a pointer.
real(r8), pointer :: npccn(:,:) ! number of CCN (liquid activated)
One of the nice things about using the physics buffer is that all fields are automatically saved and carried across model restarts.
There are many examples of creating and using pbuf fields in the model. Some of the NPCCN field examples above are from cesm2_2_0 in components/cam/src/physics/cam/microp_areo.F90. There are also discussions of using the physics_buffer in this forum (for example
Questions on physics_buffer )
Hope this helps.
jt