diff --git a/README.txt b/README.txt
index 04d986c1f181593e55356c907f60bbbdc665f985..fc882132656715c62e7e3df663d7d29834a4e1ae 100644
--- a/README.txt
+++ b/README.txt
@@ -57,6 +57,6 @@ Contents:
   constraint:
      - extra tool (not necessarily needed for FLEXINVERT) to
        constrain fluxes to known values
-     - either constrains fluxes > 0 or adds additional constraint
+     - either constrains fluxes >= 0 or adds additional constraint
        for global inversions with limited observational coverage in
        some regions 
diff --git a/constraint/makefile b/constraint/makefile
index 2b2c8411768a1363e9c459e9a64ee39793432104..d69aef813d770572f98c4741f35b83630b5c0848 100644
--- a/constraint/makefile
+++ b/constraint/makefile
@@ -2,43 +2,27 @@ F90      = /apps/sw/ubuntu22.04/gcc-11.4.0/gcc-13.2.0-tkesyophy2o6rjlzknndu3b4oy
 LIBPATH = /apps/sw/ubuntu22.04/gcc-13.2.0/netcdf-fortran-4.6.1-ubcs4l6pjwpgoeyvz32wpzyzykib6bwm/lib/
 INCPATH = /apps/sw/ubuntu22.04/gcc-13.2.0/netcdf-fortran-4.6.1-ubcs4l6pjwpgoeyvz32wpzyzykib6bwm/include/
 
-LNK = -o
-CMPL = -c
-LIBS = -lnetcdf -lnetcdff -llapack
+LIBS  = -llapack -lm -DUSE_NCF -lnetcdff
 
-FFLAGS = -O3 -g -m64 -fbounds-check -mcmodel=medium -fconvert=little-endian -frecord-marker=4 -ffree-form \
-         -fbacktrace
+FFLAGS = -I$(INCPATH) -O3 -g -m64 -fbounds-check -mcmodel=medium -fconvert=little-endian -frecord-marker=4 -ffree-form \
+         -fbacktrace -DUSE_NCF -lnetcdff
 
-LDFLAGS  = $(FFLAGS)  -L$(LIBPATH) -I$(INCPATH) $(LIBS)
+LDFLAGS  = $(FFLAGS) -L$(LIBPATH) -Wl,-rpath,$(LIBPATH) $(LIBS)
 
 MAIN = constraint
 
 OBJECTS = mod_var.o main.o readinitial.o readinput.o gridarea.o \
           calcselector.o bayesian.o regridemissions.o write3Dncdf.o save.o
 
+%o.: %.mod
+
 $(MAIN): $(OBJECTS)
-	$(F90) $(LNK) $(MAIN) $(OBJECTS) $(LIBS)
-mod_var.o: mod_var.f90
-	$(F90) $(LDFLAGS) $(CMPL) mod_var.f90
-main.o: main.f90
-	$(F90) $(LDFLAGS) $(CMPL) main.f90
-readinitial.o: readinitial.f90
-	$(F90) $(LDFLAGS) $(CMPL) readinitial.f90
-readinput.o: readinput.f90
-	$(F90) $(LDFLAGS) $(CMPL) readinput.f90
-gridarea.o: gridarea.f90
-	$(F90) $(LDFLAGS) $(CMPL) gridarea.f90
-calcselector.o: calcselector.f90
-	$(F90) $(LDFLAGS) $(CMPL) calcselector.f90
-bayesian.o: bayesian.f90
-	$(F90) $(LDFLAGS) $(CMPL) bayesian.f90
-regridemissions.o: regridemissions.f90
-	$(F90) $(LDFLAGS) $(CMPL) regridemissions.f90
-write3Dncdf.o: write3Dncdf.f90
-	$(F90) $(LDFLAGS) $(CMPL) write3Dncdf.f90
-save.o: save.f90
-	$(F90) $(LDFLAGS) $(CMPL) save.f90
+	+$(F90) -o $@ $(OBJECTS) $(LDFLAGS)
+
+%.o : %.f90
+	+$(F90) -c $(FFLAGS) $<
 
 clean:
 	rm *.o *.mod
 
+.SUFFIXES = ${SUFFIXES} .f90
diff --git a/source/mod_analytic.f90 b/source/mod_analytic.f90
index 4f1d9fa2bd6c4b606208065ee15cf6675e0e60fc..146100e51b11de2f6803a5777bd475cb17c0ca3b 100644
--- a/source/mod_analytic.f90
+++ b/source/mod_analytic.f90
@@ -308,8 +308,8 @@ module mod_analytic
     ! verbose output
     ! --------------
 
-    if ( config%const_out ) then
-      filename = trim(files%path_output)//'izwork.txt'
+    if ( config%verbose.or.config%const_out ) then
+      filename = trim(files%path_output)//'cova.txt'
       open(100,file=trim(filename),status='replace',action='write',iostat=ierr)
       write(rowfmt,'(A,I6,A)') '(',nvar,'(E11.4,1X))'
       do i = 1, nvar
diff --git a/source/mod_save.f90 b/source/mod_save.f90
index 5e3ca753d7c68aca39295aea9694ee00ced38858..1219cef9abf73cab24f6006fea11807758a22fbc 100644
--- a/source/mod_save.f90
+++ b/source/mod_save.f90
@@ -143,7 +143,7 @@ module mod_save
       ! write posterior state vector if constraint output is requested
       open(100,file=trim(files%path_output)//'posterior.txt',status='replace',action='write',iostat=ierr)
       do n = 1, nvar
-              write(100,*) states%px(n)/numscale
+        write(100,*) states%px(n)/numscale
       end do
       close(100)
     endif
diff --git a/source/mod_settings.f90 b/source/mod_settings.f90
index b49c8661793f78e97cf91b9191d0bb729a8deb7b..082047adb0865c030bc21984fd041091f43656a3 100644
--- a/source/mod_settings.f90
+++ b/source/mod_settings.f90
@@ -961,6 +961,10 @@ module mod_settings
         print*, 'ERROR: at least one of satellite or ground must be true'
         stop
       endif
+      if ( config%const_out.and..not.config%method.eq.'analytic' ) then
+        print*, 'ERROR: for constraint output method must be analytic'
+        stop
+      endif
 
     end subroutine read_config_settings